package com.uuah.server.busi.vbirth.common.transformer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.uuah.server.api.IUuahMessage;
import com.uuah.server.exception.transformer.TransformerException;
import com.uuah.server.transformer.AbstractMessageAwareTransformer;

public class ResponseTransformer extends AbstractMessageAwareTransformer {
	private static Logger logger = LoggerFactory
			.getLogger(ResponseTransformer.class);

	@Override
	public Object transform(IUuahMessage message, String outputEncoding)
			throws TransformerException {
		logger.debug("==BusiResponseTransformer transform==");
//		long requestDecodeTime = message.getLongProperty(
//				Constants.REQUEST_DECODE_TIME, 0);
//		SkyBusiMessage skyBusiMessage = null;
//		Object payLoad = message.getPayload();
//		List response = new CopyOnWriteArrayList();
//		List list = null;
//		if (payLoad instanceof NullPayload) {
//			// ������Ӧ����
//			// BaseBusiResponse skyBusiResponse = new BaseBusiResponse();
//			// list = new CopyOnWriteArrayList();
//			// skyBusiResponse
//			// .setErrorCode(SkyBusiConstant.SSIPEC_AAA_DB_BUSY);
//			// skyBusiResponse.setLength(32);
//			// skyBusiResponse.setBasicVer(0);
//			// list.add(skyBusiResponse);
//		} else {
//			list = (List) payLoad;
//		}
//		if (list != null) {
//			for (Object object : list) {
//				if (object instanceof NullPayload) {
//					continue;
//				}
//				skyBusiMessage = new SkyBusiMessage();
//				BeanUtils.copyProperties(object, skyBusiMessage,
//						new String[] { "serialVersionUID" });
//				Field[] fields = object.getClass().getDeclaredFields();
//				if (BaseBusiResponse.class.equals(object.getClass())) {
//					logger.debug("���ǻ���BaseBusiResponse!");
//				} else {
//					fields = (Field[]) ArrayUtils.addAll(fields, object
//							.getClass().getSuperclass().getDeclaredFields());
//				}
//				byte[] temp = null;
//				Arrays.sort(fields, new SkyMessageFieldComparator());
//				for (Field field : fields) {
//					SkyMessageField skyMessageField = field
//							.getAnnotation(SkyMessageField.class);
//					if (skyMessageField != null) {
//
//						if (field.getType().equals(String.class)) {
//							String str = null;
//							try {
//								str = (String) com.sky.util.BeanUtils
//										.forceGetProperty(object, field
//												.getName());
//							} catch (NoSuchFieldException e) {
//								logger.error("{}", e.getMessage());
//							}
//							if (StringUtils.isNotBlank(str)) {
//								if (skyMessageField.byteLength() == 0) {
//									// �ַ���'\0'����
//									try {
//										temp = ArrayUtils.addAll(temp, str
//												.getBytes(SkyServer
//														.getSkyContext()
//														.getConfiguration()
//														.getDefaultEncoding()));
//
//									} catch (UnsupportedEncodingException e) {
//										logger.error(e.getMessage());
//									}
//									temp = ArrayUtils.add(temp, (byte) 0x00);
//								} else if (skyMessageField.byteLength() > 0) {
//									// �ַ���
//									try {
//										byte[] fieldArray = new byte[skyMessageField
//												.byteLength()];
//										byte[] strArray = ArrayUtils
//												.subarray(
//														str
//																.getBytes(SkyServer
//																		.getSkyContext()
//																		.getConfiguration()
//																		.getDefaultEncoding()),
//														0, skyMessageField
//																.byteLength());
//										ArrayUtils.reverse(strArray);
//										System.arraycopy(strArray, 0,
//												fieldArray, 0, strArray.length);
//										ArrayUtils.reverse(fieldArray);
//										temp = ArrayUtils.addAll(temp,
//												fieldArray);
//									} catch (UnsupportedEncodingException e) {
//										logger.error("{}", e.getMessage());
//									}
//								}
//							} else {
//								// TODO
//								if (skyMessageField.byteLength() == 0) {
//									temp = ArrayUtils.add(temp, (byte) 0x00);
//								}
//							}
//						} else {
//							try {
//								Object val = com.sky.util.BeanUtils
//										.forceGetProperty(object, field
//												.getName());
//								if (val != null
//										&& StringUtils
//												.isNumeric(val.toString())) {
//									temp = ArrayUtils.addAll(temp, SkyUtils
//											.integer2ByteArray(Integer
//													.valueOf(val.toString()),
//													skyMessageField
//															.byteLength()));
//								} else {
//									temp = ArrayUtils.addAll(temp, SkyUtils
//											.integer2ByteArray(0,
//													skyMessageField
//															.byteLength()));
//								}
//								if (field.getName().equals("errorCode")) {
//									if (NumberUtils.toInt(val) != SkyBusiConstant.SSIPEC_SUCCESS) {
//										break;
//									}
//								}
//							} catch (NoSuchFieldException e) {
//								logger.error("{}", e.getMessage());
//							}
//						}
//					}
//				}
//				if (temp != null) {
//					skyBusiMessage.setSkyBusiMessageBody(temp);
//					skyBusiMessage.setDataLength(temp.length);
//					skyBusiMessage.setLength(32 + temp.length);
//				} else {
//					skyBusiMessage.setDataLength(0);
//					skyBusiMessage.setLength(32);
//				}
//				if (requestDecodeTime == 0) {
//					if (logger.isDebugEnabled()) {
//						logger.debug("ҵ��:" + skyBusiMessage.getTransactionId()
//								+ "���������ʱ��:invalid");
//					}
//				} else {
//					if (logger.isDebugEnabled()) {
//						long duration = System.currentTimeMillis()
//								- requestDecodeTime;
//						String msg = "";
//						if (duration >= 1000) {
//							msg = DateUtils.getFormattedDuration(duration);
//						} else {
//							msg = duration + " ms";
//						}
//						logger.debug("ҵ��:" + skyBusiMessage.getTransactionId()
//								+ "���������ʱ��:" + msg);
//					}
//				}
//				response.add(skyBusiMessage);
//			}
//		}
//		return response;
		return null;
	}
}
